function isValid(s) {
    const stack = [];
    const mapping = { '(': ')', '[': ']', '{': '}' };
    const openSet = '{[(';

    for (let char of s) {
        if (openSet.includes(char)) {
            stack.push(char); // 如果是打开的括号，压入栈中
        } else {
            // 如果是闭合的括号，检查栈是否为空
            if (stack.length === 0) {
                return false; // 栈为空，说明没有匹配的打开括号
            }
            const topElement = stack.pop(); // 弹出栈顶元
            if (mapping[topElement] !== char) {
                return false; // 如果弹出的元素与当前字符不匹配，返回false
            }
        }
    }

    return stack.length === 0; // 如果栈为空，说明所有括号都匹配
}

// 测试
console.log(isValid("{[()]}")); // true